【问题标题】:Selenium - CSS Selectors : How to find out which color is a selector in a long list of items, for each item?Selenium - CSS 选择器:如何在每个项目的长列表中找出哪种颜色是选择器?
【发布时间】:2018-08-12 08:46:10
【问题描述】:

在我正在处理的页面中 - 我有一个项目列表 (#54),对于每个项目我都有几个参数,例如:名称、价格变化、其他参数和时钟,显示为红色或绿色。请看截图

使命:了解每个项目/行的时钟是什么颜色

我制作了一个项目名称列表,我可以使用名称的专用选择器打印它的名称 - 简单的部分完成了!

其他信息

  1. 每种颜色的每个时钟都有一个唯一的 ID,可以说: 绿色:class='绿色', 红色:class='红色'
  2. 每个项目行都有一个用于整行的唯一 css 选择器,时钟选择器是该行 css 选择器内的子项

所以,对于每个项目,我想知道它的时钟是红色还是绿色。所以我尝试了以下解决方案:

1) 将时钟插入到第二个列表中,但问题来了:如果我将时钟插入到列表中,我只能这样做,但要使用“包含”CSS 选择器标识符 [class* = xxx],并且那么程序就无法区分哪个是红色,哪个是绿色

2)我有一个整行的 CSS 选择器,我试图将它放入一个列表中,然后以某种方式找到:'整行 Css > 时钟 CSS'。那也没有用。

你能告诉我如何找到每个项目的时钟颜色吗?

public static void WatchlistInstrumentsList(WebDriver driver, boolean finalstatus ,ExtentTest logger,int SocketChangeCounter) throws InterruptedException
{


    int size = 2;

    for (int i = 1; i < size ; i++) {
        //for (int j=1 ; j<sizex ; j=j+2)
        //{

        // Create a list of instruments
        List <WebElement> listName;
        List <WebElement> rowsData;


        // The selector of instrument's name
        listName= driver.findElements(By.cssSelector("[id='tbody_overview_3032754']>[id^='sort_']>[data-column-name='name']>[target='_blank']"));
        // The selector of a whole row (all datat inside)
        rowsData= driver.findElements(By.cssSelector("[id='tbody_overview_3032754']>[id^='sort_']")); 




        // ** Works on Browser search [id='tbody_overview_3032754']>[id^='sort_']>[data-column-name='name']>[target='_blank'] **//

        size = listName.size();




        try {
        String name = listName.get(i).getText(); // instrument's name taken from list
        System.out.println("Instrument's name:" +name +" , Instrument's counter:" +i);
        finalstatus = true;

        // ***HOW TO FIND THE CLOCK COLOR ****** ///

        }


        //TestClockOfInstrument.runTestClockWatchlist(driver, finalstatus, logger, i, SocketChangeCounter);

        catch(Exception e)
        {
            System.out.println(e);
        }

        }
    }

【问题讨论】:

标签: java selenium selenium-webdriver css-selectors elements


【解决方案1】:

你可以试试下面的代码:

WebDriver driver = new FirefoxDriver();
    Thread.sleep(3000);
    driver.get("https://www.investing.com/portfolio/?portfolioID=NTNiMWAwMG5kMmlhNG4%3D");
    Thread.sleep(10000);
    driver.findElement(By.xpath(".//div[@id='PromoteSignUpPopUp']//div[@class='right']/i[@class='popupCloseIcon']")).click();
    driver.findElement(By.id("loginFormUser_email")).sendKeys("dimainvesting@gmail.com");
    driver.findElement(By.id("loginForm_password")).sendKeys("de123456");
    Thread.sleep(1000);
    driver.findElement(By.xpath(".//*[@id='signup']/a")).click();
    Thread.sleep(1000);
    driver.findElement(By.xpath(".//*[@id='navMenu']/ul/li[9]/a")).click();
    Thread.sleep(3000);
    List<WebElement> elementList = driver.findElements(By.xpath(".//table[contains(@class,'myPortfolioTbl')]//tr/td[20]/span"));
    for (int i =0 ; i< elementList.size(); i++ ) {
        System.out.println(elementList.get(i).getAttribute("class"));
    }

结果将如下所示:

【讨论】:

    【解决方案2】:

    我的朋友,你给了我几个小时前找到的完美解决方案。

    1) 我通过 css 选择器使用通用元素值收集所有元素:[class*='xxx'],然后插入到列表中

    2) 现在所有时钟元素都被列表识别为同一个,因为我通过公共 css 值收集了它们

    3) 我使用:elementList.get(i).getAttribute("class")) 来获取它们的完整属性值,现在我可以区分:红色和绿色

    Sudha Velan - 感谢您抽出宝贵时间提供帮助,非常感谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-31
      相关资源
      最近更新 更多