我有一个下拉选择,该类根据鼠标在下拉值(有效值)上的移动而变化
我尝试了以下代码,并且适用于“个人”
driver.findElement(By.cssSelector("div[class=ui-menu-item-wrapper]")).click();
如果您看到屏幕截图,则“ ui-menu-item-wrapper”类对于个人和公司都是相同的。
问题:我不确定如何使用cssSelector选择“个人”或“公司”。我想从Excel数据Feed中提供个人或公司。
答案 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;
}
}
希望有帮助。