我正在尝试通过Yahoo邮件登录。无法继续单击“下一步”按钮。我找不到我想念的地方。请指导我。谢谢。
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class FirstScript {
public static void main (String[] args) {
System.setProperty("webdriver.chrome.driver","C:\\Selenium\\selenium-java- 3.141.59\\chromedriver_win32\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
driver.manage().deleteAllCookies();
driver.manage().timeouts().pageLoadTimeout(40, TimeUnit.SECONDS);
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.get("https://login.yahoo.com/"); driver.findElement(By.name("username")).sendKeys("[email protected]"); //name locator for text box
WebElement searchIcon = driver.findElement(By.name("signin"));//name locator for next button
searchIcon.click();
driver.findElement(By.name("password")).sendKeys("testing"); //name locator for text box
WebElement searchIcon2 = driver.findElement(By.name("verifyPassword"));//name locator for next button
searchIcon2.click();
}
}
您的脚本是正确的。您只需要等待,直到屏幕重定向到下一页即可。修改后的脚本(包括显式等待)如下;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
public class sample{
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver","<driverlocation>");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
WebDriverWait wait = new WebDriverWait(driver,30);
driver.manage().deleteAllCookies();
driver.manage().timeouts().pageLoadTimeout(40, TimeUnit.SECONDS);
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.get("https://login.yahoo.com/");
driver.findElement(By.name("username")).sendKeys("[email protected]"); // name locator for text box
WebElement searchIcon = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//*[@id=\"login-signin\"]")));// name locator for next button
searchIcon.click();
WebElement password = wait.until(ExpectedConditions.presenceOfElementLocated(By.name("password")));
password.sendKeys("testing"); // name locator for text box
WebElement searchIcon2 = driver.findElement(By.name("verifyPassword"));// name locator for next button
searchIcon2.click();
}
}`
首先将字符序列发送到电子邮件地址字段,在按钮上调用文本为[[Next的click()
,将字符序列发送到Password字段,然后再次调用[按钮上的文本为Next的C0],则需要为click()
引入WebDriverWait,并且可以使用以下定位器策略:
elementToBeClickable()
System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("start-maximized");
options.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation"));
options.setExperimentalOption("useAutomationExtension", false);
WebDriver driver = new ChromeDriver(options);
driver.navigate().to("https://login.yahoo.com/");
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("input.phone-no#login-username"))).sendKeys("ravi");
driver.findElement(By.cssSelector("input#login-signin")).submit();
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("div#password-container>input"))).sendKeys("test123");
((JavascriptExecutor)driver).executeScript("arguments[0].click();", driver.findElement(By.xpath("//button[@id='login-signin']")));