根据突出显示的类别更改类时如何选择Selenium Web元素

时间:2019-05-03 19:36:42

标签: selenium selenium-webdriver

我有一个下拉选择,该类根据鼠标在下拉值(有效值)上的移动而变化F12 HTML screenshot with the UI

我尝试了以下代码,并且适用于“个人”

driver.findElement(By.cssSelector("div[class=ui-menu-item-wrapper]")).click();

如果您看到屏幕截图,则“ ui-menu-item-wrapper”类对于个人和公司都是相同的。

问题:我不确定如何使用cssSelector选择“个人”或“公司”。我想从Excel数据Feed中提供个人或公司。

5 个答案:

答案 0 :(得分:1)

这里是使用xpath选择的选项。

Xpath:

//ul[starts-with(@class,'ui-menu') and @role='combobox']//div[normalize-space(.)='" + valueFromExcel +"']
  

// ul [开始于(@ class,'ui-menu')和@ role ='combobox'] // div [normalize-space(。)='Individual']

在这种情况下,使用xpath非常简单直接,因为您打算使用文本来标识CSS不支持的元素。

如果仍然要坚持使用CSS,则必须使用CSS获取每个元素的文本,如果文本匹配,则选择nth元素。

答案 1 :(得分:1)

使用WebDriverWait处理动态元素,然后在Xapth上单击该元素。希望此代码对您有用。

String text="corporation";
WebDriverWait wait=new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@class='ui-menu-item-wrapper' and text()='" + text + "']"))).click();

答案 2 :(得分:1)

如果出于某种原因没有必要使用CSS选择器,并且元素的ID不是动态的并且保持不变,则可以按ID查找元素。或者,您可以使用XPath通过文本查找元素。

以下是您可以找到列表第二个元素的一些方法。

ID

driver.findElement(By.id("ui-id-194")).click();

XPath

//Finds the element by text
String text = "Corporation";
driver.findElement(By.xpath("//li[@class='ui-menu-item']/div[contains(text(),'"+ text +"')]")).click();

CSS选择器

//Finds the second div with the same class
driver.findElement(By.cssSelector("div[class=ui-menu-item-wrapper]:nth-of-type(2)")).click();

此外,您可以使用CSS选择器或xpath来使用元素的ID来获取元素,如Valga的答案所示。

答案 3 :(得分:0)

您可以使用选择器找到匹配的元素,该选择器可以找到前缀"ui-menu-item-wrapper"

driver.findElements(By.cssSelector("div[class^=ui-menu-item-wrapper]"));

答案 4 :(得分:-1)

尝试这些

使用公司DIV的ID

driver.findElement(By.cssSelector("[id='ui-id-194']")).click();

或使用findelements获取包含在其类“ ui-menu-item-wrapper”中的元素的列表,然后单击列表的第二项(0是第一项,1是第二项,在这种情况下,公司。

driver.findElements(By.cssSelector("div[class*=ui-menu-item-wrapper]")).get(1).click();

您还可以执行以下操作以单击包含某些文本的列表元素:

for (WebElement x : driver.findElements(By.cssSelector("div[class*=ui-menu-item-wrapper]"))){
    if (x.getText().equals("StringValueYouWantHere")){
        x.click();
        break;
    }
}

希望有帮助。