Selenium - CSS 选择器:如何找出一长串项目中选择器的颜色是每个项目的哪个颜色?
Selenium - CSS Selectors : How to find out which color is a selector in a long list of items, for each item?
在我正在处理的页面中 - 我有一个项目列表 (#54),对于每个项目我都有几个参数,例如:名称、价格变化、其他参数和显示红色或绿色的时钟.请看截图
任务:了解每个item/row时钟的颜色
我制作了一个项目名称列表,我可以使用名称的专用选择器打印它的名称 - 简单的部分就完成了!
附加信息
- 每种颜色的每个时钟都有一个唯一的 ID 让我们说:
绿色:class='green',
红色:class='red'
- 每个项目行对整行都有一个唯一的 css 选择器,时钟选择器是该行 css 选择器
内的子项
因此,对于每个项目,我想知道它的时钟是红色还是绿色。所以我尝试了以下解决方案:
1)要将时钟插入第二个列表,但问题来了:如果我将时钟插入列表,我只能这样做,但是 'Contains' CSS 选择器标识符[class* = xxx],然后程序无法区分哪个是红色哪个是绿色
2) 我有一整行的 CSS 选择器,我试图将它放入列表中,然后以某种方式找到:'Whole row Css > Clock 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);
}
}
}
您可以试试下面的代码:
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"));
}
结果将如下所示:
我的朋友,你给出了我几个小时前找到的完美解决方案。
1) 我通过 css 选择器使用公共元素值收集了所有元素:[class*='xxx'],然后插入列表
2) 现在所有时钟元素都被列表识别为相同的元素,因为我通过公共 css 值
收集了它们
3) 我使用:elementList.get(i).getAttribute("class")), 来获取它们的完整属性值,现在我可以区分:红色和绿色
Sudha Velan - 感谢您花时间提供帮助,非常感谢
在我正在处理的页面中 - 我有一个项目列表 (#54),对于每个项目我都有几个参数,例如:名称、价格变化、其他参数和显示红色或绿色的时钟.请看截图
任务:了解每个item/row时钟的颜色
我制作了一个项目名称列表,我可以使用名称的专用选择器打印它的名称 - 简单的部分就完成了!
附加信息
- 每种颜色的每个时钟都有一个唯一的 ID 让我们说: 绿色:class='green', 红色:class='red'
- 每个项目行对整行都有一个唯一的 css 选择器,时钟选择器是该行 css 选择器 内的子项
因此,对于每个项目,我想知道它的时钟是红色还是绿色。所以我尝试了以下解决方案:
1)要将时钟插入第二个列表,但问题来了:如果我将时钟插入列表,我只能这样做,但是 'Contains' CSS 选择器标识符[class* = xxx],然后程序无法区分哪个是红色哪个是绿色
2) 我有一整行的 CSS 选择器,我试图将它放入列表中,然后以某种方式找到:'Whole row Css > Clock 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);
}
}
}
您可以试试下面的代码:
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"));
}
结果将如下所示:
我的朋友,你给出了我几个小时前找到的完美解决方案。
1) 我通过 css 选择器使用公共元素值收集了所有元素:[class*='xxx'],然后插入列表
2) 现在所有时钟元素都被列表识别为相同的元素,因为我通过公共 css 值
收集了它们3) 我使用:elementList.get(i).getAttribute("class")), 来获取它们的完整属性值,现在我可以区分:红色和绿色
Sudha Velan - 感谢您花时间提供帮助,非常感谢