Java 使用Selenium单击div标记中具有属性角色的按钮

Java 使用Selenium单击div标记中具有属性角色的按钮,java,html,selenium,button,Java,Html,Selenium,Button,如何使用下面的HTML标记单击按钮 <div class="_1WZqU PNlAR" role="button">OK</div> 我收到以下错误消息: 选择器无效:不允许使用复合类名 尝试使用,按钮标记在HTML中不存在 //div[text()='OK'] 使用此代码 driver.findElement(By.xpath("//div[text()='OK']")).click(); 您还可以使用JavascriptExecutor WebElement O

如何使用下面的HTML标记单击
按钮

<div class="_1WZqU PNlAR" role="button">OK</div>
我收到以下错误消息:

选择器无效:不允许使用复合类名


尝试使用,按钮标记在HTML中不存在

//div[text()='OK']
使用此代码

driver.findElement(By.xpath("//div[text()='OK']")).click();
您还可以使用
JavascriptExecutor

WebElement OKBtnElement = driver.findElement(By.xpath("//div[text()='OK']"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", OKBtnElement );
你应使用:


希望这对你有帮助

添加HTML源代码,格式化代码,添加更多信息
不起作用的内容
的含义。是否出现异常或元素未被单击?是否尝试使用javascript单击?实际出现的错误是因为您在
By.className()
中放置了两个类名。您必须选择其中一个类或将其转换为CSS选择器,
By.cssSelector(“.\u 1WZqU.PNlAR”)
。很好地抓住了
div
标记!我认为不应该使用JavascriptExecutor它不像人类的点击。。。但在某些情况下,这是不可避免的。。。OP应该首先尝试
WebDriverWait
…IMO@MosheSlavin非常正确地提到,为了模仿人类相似的行为,应该首先尝试强大、经验证的
click()
,基于javascript的
click()
应该是最后的选择。否则,这些答案对未来的读者将毫无用处,并且很容易遭到否决。WebDriverWait是不可避免的,因为元素显然是动态生成的元素。
WebElement OKBtnElement = driver.findElement(By.xpath("//div[text()='OK']"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", OKBtnElement );
WebDriverWait wait = new WebDriverWait(driver, 10); 
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//div[text()='OK']")));
element.click();