【发布时间】:2021-01-14 02:55:21
【问题描述】:
只想在从下拉列表中选择选项后打印所选选项的值。
package Webbasics;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.Select;
public class ecommerce {
public static void main(String args[]) throws InterruptedException {
System.setProperty("webdriver.chrome.driver","C:\\Program Files\\selenium\\chromedriver.exe");
WebDriver driver=new ChromeDriver();
driver.get("http://live.demoguru99.com/index.php/");
driver.manage().window().maximize();
driver.findElement(By.xpath("//*[@id=\"nav\"]//li[1]/a")).click();
Select sortBy=new Select(driver.findElement(By.xpath("(//select[contains(@title,\"Sort By\")])[1]")));
sortBy.selectByIndex(1);
Select sortBy1=new Select(driver.findElement(By.xpath("(//select[contains(@title,\"Sort By\")])[1]")));
WebElement selected=sortBy1.getFirstSelectedOption();
System.out.println(selected.getText());
}
}
我得到了正确的结果,但我认为这不是写两次选择类的最佳方式,所以你能帮我写一个更好的方式
【问题讨论】:
-
去掉
sortBy1的声明,使用WebElement selected=sortBy.getFirstSelectedOption();除非索引的设置导致元素sortBy变成stale,这种情况下你的代码是正确的。 -
是的,它抛出了陈旧的元素异常,这就是为什么我用另一个对象引用声明它
-
那么你的代码是正确的。你不能使用同一个对象,因为它已经过时了。但是,您可以使用相同的变量,但再次设置它的值而不是使用
sortBy1->sortBy=new Select(driver.findElement(By.xpath("(//select[contains(@title,\"Sort By\")])[1]")));
标签: java selenium selenium-webdriver selenium-chromedriver testng