im试图使用Selenium Java通过名称或ID定位元素,但我无法定位
System.setProperty("webdriver.chrome.driver",driverPath + "chromedriver");
System.out.println(driverPath + "chromedriver");
WebDriver driver = new ChromeDriver();
WebDriverWait wait = new WebDriverWait(driver, 15);
String baseUrl = "xxxx";
driver.get(baseUrl);
driver.manage().window().maximize();
ByName salutation = new ByName("salutation");
wait.until(ExpectedConditions.elementToBeClickable(salutation));
WebElement root1 = driver.findElement(salutation);
多数民众赞成在我收到的消息。即时消息超级困惑为什么我收到此错误消息,提示“方法:css选择器”,因为我显然没有使用css选择器:
Exception in thread "main" org.openqa.selenium.TimeoutException: Expected condition failed: waiting for element to be clickable: By.name: salutation (tried for 15 second(s) with 500 milliseconds interval)
at org.openqa.selenium.support.ui.WebDriverWait.timeoutException(WebDriverWait.java:95)
at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:272)
at de.xx.tests.XXTests.main(XXTests.java:29)
Caused by: org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"css selector","selector":"*[name='salutation']"}
(Session info: chrome=78.0.3904.108)
答案 0 :(得分:1)
ByName
是WebDriver定义的API,实际实现将其转换为CSS选择器*[name='salutation']
如您所见,它正在尝试按名称查找元素,但是找不到。
没有被测页面的HTML代码,无法说出为什么找不到它:假设您使用elementToBeClickable
,则该元素必须可见并启用,以便您可以单击它。
答案 1 :(得分:0)
TimeoutException 是失败 ExpectedConditions 的结果。在您的代码块中,您将WebDriverWait的ExpectedConditions引为elementToBeClickable(WebElement element)
,其中Selenium试图通过有效的元素来确定元素 cssSelector
:
*[name='salutation']
中找到详细的讨论
可能将WebElement salutation
定义为以下定位符之一:
name
:
salutation
cssSelector
:
[name='salutation']
xpath
:
//*[@name='salutation']
作为解决方案,您可以使用细粒度的定位器,将 tagName 添加到定位器策略中,如下所示:
tagName[attributeName='attributeValue']
因此您的有效定位器将是:
cssSelector
:
tagName[name='salutation']
xpath
:
//tagName[@name='salutation']