https://www.phptravels.net有两个具有相同名称和属性的输入框(输入City或Airport)。因此,我的xpath导致“无此元素”异常。有没有解决的办法。请帮忙!以下是代码:
package com.php.travels;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class Booking {
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver",
"/Users/owner/desktop/chromedriver");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
driver.get("https://www.phptravels.net");
driver.findElement(By.xpath("//span[text()='Flights']")).click();
driver.findElement(By.xpath("//*[@id='select2-
drop']/div/input")).sendKeys("LAX");
}
}
答案 0 :(得分:0)
问题不在于两个元素具有相同的ID。
当您单击文本字段时,标识将被更改。这意味着您每次只会找到单个输入元素。您不必担心它们是否具有相同的ID。
在找到输入元素之前,您必须单击文本字段。请参阅下面的代码。
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
driver.get("https://www.phptravels.net");
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[text()='Flights']")));
element.click();
driver.findElement(By.xpath("//*[@id='s2id_location_from']")).click();
driver.findElement(By.xpath("//*[@id='select2-drop']/div/input")).sendKeys("LAX");
element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@class='select2-results']//li[contains(.,'LAX')]")));
element.click();
driver.findElement(By.xpath("//*[@id='s2id_location_to']")).click();
driver.findElement(By.xpath("//*[@id='select2-drop']/div/input")).sendKeys("DMK");
element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@class='select2-results']//li[contains(.,'DMK')]")));
element.click();
答案 1 :(得分:0)
两个输入框都有不同的名称
<input type="text" name="" id="location_from" tabindex="-1" class="select2-offscreen">
<input type="text" name="" id="location_to" tabindex="-1" class="select2-offscreen">
因此,您可以为第一个和第二个输入框使用以下CSS选择器
对于第一个输入框:input#location_from.select2-offscreen
对于第二个输入框:input#location_to.select2-offscreen
我已经尝试过这两个定位器,并且它们都工作正常。
答案 2 :(得分:0)
只有当您可以获得准确的定位器时,定位器才会出现问题,那么就不会有问题:
package com.php.travels;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class Booking {
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver",
"/Users/owner/desktop/chromedriver");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS);
driver.get("https://www.phptravels.net");
driver.findElement(By.xpath("//span[@class='hidden-xs' and contains(text(),'Flights')]")).click();
driver.findElement(By.xpath("//span[@class='select2-chosen' and contains(text(),'Enter City Or Airport')]")).click();
driver.findElement(By.xpath("//div[@class='select2-drop-mask']/following-sibling::div//input[contains(@class,'select2-input')]")).sendKeys("LAX");
}
}