如何使用Selenium和Java定位元素

如何使用Selenium和Java定位元素,java,selenium,xpath,css-selectors,webdriverwait,Java,Selenium,Xpath,Css Selectors,Webdriverwait,我没有在给定代码中识别定位器来执行自动化测试 元素的HTML: <a href="https://www.amazon.in/ap/signin?openid.pape.max_auth_age=0&openid.retu…%2Fidentifier_select&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&" class="nav-a nav-a-2" data-nav-ref="nav_ya_sign

我没有在给定代码中识别定位器来执行自动化测试

元素的HTML:

<a href="https://www.amazon.in/ap/signin?openid.pape.max_auth_age=0&openid.retu…%2Fidentifier_select&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&" class="nav-a nav-a-2" data-nav-ref="nav_ya_signin" data-nav-role="signin" data-ux-jq-mouseenter="true" id="nav-link-accountList" tabindex="25">

您可以使用下面的xpath来选择链接

//a[@class='nav-a nav-a-2' and @data-nav-role='signin']
或者你应该和他好好相处

//a[@data-nav-role='signin']
CSS定位器

a[data-nav-role='signin']

您可能正试图在文本为的元素上
单击()
,登录,为此,您需要:

  • 鼠标悬停在元素上,文本为您的订单/帐户和列表
  • 单击文本为“登录”的元素
  • 您可以使用以下解决方案:

    System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
    WebDriver driver = new ChromeDriver();
    driver.get("http://www.amazon.in");
    new Actions(driver).moveToElement(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@id='nav-tools']/a//span[@class='nav-line-2']")))).build().perform();
    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//span[@class='nav-action-inner' and text()='Sign in']"))).click();
    

有一个id,因此使用它作为最快的选择器方法

#nav-link-accountList

看起来您正在尝试单击给定的锚元素下的第三个跨度元素。给出错误的XPath不适用于给定的元素

给定的元素有一个id。因此您可以通过id直接定位元素

使用ID:

Webdriver driver = new ChromeDriver();    
driver.findElement(By.id("nav-link-accountList"));
使用Css选择器:

Webdriver driver = new ChromeDriver();
driver.findElement(By.cssSelector("#nav-link-accountList"));
Webdriver driver = new ChromeDriver();
driver.findElement(By.xpath("//*[@id='nav-link-accountList']"));
使用XPath:

Webdriver driver = new ChromeDriver();
driver.findElement(By.cssSelector("#nav-link-accountList"));
Webdriver driver = new ChromeDriver();
driver.findElement(By.xpath("//*[@id='nav-link-accountList']"));

欢迎来到SO。请提供一些您正在寻找的元素的html代码以及您迄今为止尝试过的代码。这将有助于其他贡献者帮助您。