硒中的元素无效

时间:2018-02-06 06:04:38

标签: selenium automated-tests selenium-ide

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;}

在这里我可以使用哪个元素进行测试............

3 个答案:

答案 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元素:

  1. id:input_0

  2. xpath://input[@ng-model='ctrl.email']

  3. xpath://input[@type='email']

  4. xpath://input[@class='no-controls md-input ng-valid-email ng-not-empty ng-dirty ng-valid ng-valid-required ng-touched']

  5. xpath://input[contains(@class,'ng-valid-email')] 注意:您可以在此处选择class值的任何唯一部分。

  6. CSS / CSS选择器:input[class='no-controls md-input ng-valid-email ng-not-empty ng-dirty ng-valid ng-valid-required ng-touched']

  7. CSS / CSS选择器:input[id='input_0']

  8.   

    最后注意:逐个尝试这个定位器。还请检查定位器类型,如xpath,csspath

    Example and Syntax

答案 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']"));