NoSuchElementException:无此类元素:无法使用Selenium和Java查找元素名称/ id属性

时间:2019-12-05 10:51:31

标签: selenium selenium-webdriver

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)

2 个答案:

答案 0 :(得分:1)

ByName是WebDriver定义的API,实际实现将其转换为CSS选择器*[name='salutation']

如您所见,它正在尝试按名称查找元素,但是找不到。

没有被测页面的HTML代码,无法说出为什么找不到它:假设您使用elementToBeClickable,则该元素必须可见并启用,以便您可以单击它。

答案 1 :(得分:0)

TimeoutException 失败 ExpectedConditions 的结果。在您的代码块中,您将WebDriverWaitExpectedConditions引为elementToBeClickable(WebElement element),其中Selenium试图通过有效的元素来确定元素 cssSelector

*[name='salutation']
  

您可以在Official locator strategies for the webdriver

中找到详细的讨论

可能将WebElement salutation 定义为以下定位符之一:

  • name

    salutation
    
  • cssSelector

    [name='salutation']
    
  • xpath

    //*[@name='salutation']
    

解决方案

作为解决方案,您可以使用细粒度的定位器,将 tagName 添加到定位器策略中,如下所示:

tagName[attributeName='attributeValue']

因此您的有效定位器将是:

  • cssSelector

    tagName[name='salutation']
    
  • xpath

    //tagName[@name='salutation']