Html代码: -
< input ng-model="ctrl.email" type="email" class="no-controls md-input ng-valid-email ng-not-empty ng-dirty ng-valid ng-valid-required ng-touched" required aria-label="Email" id="input_0" aria-invalid="false" style>
Selenium代码: -
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver","R://MCA//Rushabh//Setup//Testing Setup//Workspace//Selenium//src//chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("URL");
String email = "EMail";
//WebElement Login =driver.findElement(ByClassName.className("segment-button"));
WebElement Login = driver.findElement(By.cssSelector
("no-controls.ng-pristine.ng-untouched.md-input.ng-empty.ng-valid-email.ng-invalid.ng-invalid-required"));
JavascriptExecutor jse = (JavascriptExecutor) driver;
jse.executeScript("arguments[0].setAttribute('aria-invalid',true);",Login);
Login.click();
}
在Selenium中显示错误: -
线程中的异常&#34; main&#34; org.openqa.selenium.NoSuchElementException: 没有这样的元素:无法定位元素:{&#34;方法&#34;:&#34; css 选择&#34;&#34;选择器&#34;:&#34;无controls.ng-pristine.ng-untouched.md-input.ng-empty.ng-有效-email.ng-invalid.ng-无效要求的&#34;}
在这里我可以使用哪个元素进行测试............
答案 0 :(得分:1)
HTML输入«
<input ng-model="ctrl.email" type="email" class="no-controls md-input ng-valid-email ng-not-empty ng-dirty ng-valid ng-valid-required ng-touched" required aria-label="Email" id="input_0" aria-invalid="false" style>
使用以下任何XPaths:
//input[@id="input_0"]
//input[@type="email"]
//input[@type="email"][@aria-label="Email"]
Java代码«
int ELEMENT_WAIT_TIME_SEC = 60;
WebDriverWait explicitWait = new WebDriverWait(driver, ELEMENT_WAIT_TIME_SEC);
String locator = "//input[@type='email'][@aria-label='Email']";
By findBy = By.xpath( locator );
WebElement element = explicitWait.until(ExpectedConditions.elementToBeClickable( findBy ));
jse.executeScript("arguments[0].setAttribute('aria-invalid',true);", element);
答案 1 :(得分:0)
您可以使用以下任意一个选择器作为Login
元素:
id:input_0
xpath://input[@ng-model='ctrl.email']
xpath://input[@type='email']
xpath://input[@class='no-controls md-input ng-valid-email ng-not-empty ng-dirty ng-valid ng-valid-required ng-touched']
xpath://input[contains(@class,'ng-valid-email')]
注意:您可以在此处选择class
值的任何唯一部分。
CSS / CSS选择器:input[class='no-controls md-input ng-valid-email ng-not-empty ng-dirty ng-valid ng-valid-required ng-touched']
CSS / CSS选择器:input[id='input_0']
最后注意:逐个尝试这个定位器。还请检查定位器类型,如xpath,csspath
答案 2 :(得分:0)
此处使用的css选择器使用类
no-controls.ng-pristine.ng-untouched.md-input.ng-empty.ng-valid-email.ng-invalid.ng-invalid-required
这不是一个好习惯,因为类可以根据您在输入框上执行的操作进行更改,例如单击,输入值等。
使用ID #input_0
作为css选择器
WebElement Login = driver.findElement(By.cssSelector("#input_0"));
或使用aria-label input[aria-label='Email']
WebElement Login = driver.findElement(By.cssSelector("input[aria-label='Email']"));