通过xpath硒查找元素

时间:2018-07-28 09:45:28

标签: selenium xpath find element

我正在使用C#和硒 我正在尝试在页面上找到一个元素,其代码如下:

<form class="login box" id="signin-form" action="/signin" method="POST">



  <div class="form-group">
    <label for="login-email" class="sr-only">Email</label>
    <input id="login-email" class="form-control" type="email" name="login_email" placeholder="Email">
  </div>

  <div class="form-group">
    <label for="login-password" class="sr-only">Password</label>
    <input id="login-password" class="form-control" type="password" name="login_password" placeholder="Password">
  </div>

  <div class="login-password-meta">
    <label class="login-remember">
      <input class="checkbox" name="login_remember" type="checkbox">
      <i class="checkbox-icon icon icon-check"></i>
      Stay signed in
    </label>

    <a class="login-forgot" href="https://codeanywhere.com/forgotpassword">Forgot password?</a>
  </div>

  <button class="login-btn btn btn-md btn-secondary-outline" type="submit">Login</button>

  <p>Or sign in instantly</p>
  <ul class="login-social">
    <li class="login-social-google-plus">
      <a href="/google/authorize?state=login"><span class="sr-only">Google+</span></a>
    </li>
    <li class="login-social-bitbucket">
      <a href="/bitbucket/authorize?state=login"><span class="sr-only">Bitbucket</span></a>
    </li>
    <li class="login-social-github">
      <a href="/github/authorize?state=login"><span class="sr-only">GitHub</span></a>
    </li>
    <li class="login-social-facebook">
      <a href="/facebook/authorize?state=login"><span class="sr-only">Facebook</span></a>
    </li>
  </ul>
</form>

我想提交表格,但是找不到clickable元素。 我尝试过

FindElement(By.TagName("form")).Submit(); 

但是在代码运行后什么也没发生!只是刷新页面

还有

FindElement(By.ClassName("login-btn).click();

它说它不可点击

4 个答案:

答案 0 :(得分:1)

谢谢大家,所有答案都对您有所帮助。但是我自己解决了这个问题。 该元素不可点击,因为它被隐藏在另一个元素下,并通过此代码使Web浏览器全屏显示。

WebDriver.Manage().Window.FullScreen();

答案 1 :(得分:0)

尝试使用javascript单击:

public static void jsPress(WebDriver driver, WebElement element) {
        JavascriptExecutor executor = (JavascriptExecutor) driver;
        executor.executeScript("arguments[0].click();", element);
    }

答案 2 :(得分:0)

您可以尝试以下方法:

FindElement(By.Xpath("//*[@id='signin-form']/button[@type = 'submit']").click();

我还要添加WebDriverWait等到元素可单击。我不知道您使用的是哪种语言,但是您可以在Google中找到WebDriverWait的示例语言。对于C#,它是这样的:

var wait = new WebDriverWait(driver, TimeSpan.FromMinutes(1));
var button = wait.Until(ExpectedConditions.ElementIsClickable(By.Xpath("//*[@id='signin-form']/button[@type = 'submit']")));
button.click();

答案 3 :(得分:0)

一种方法是在填写表单后发送输入键

using OpenQA.Selenium.Interactions;

Actions builder = new Actions(driver);        
builder.SendKeys(Keys.Enter);   

否则,您可以尝试使用 XPATH

//button[text()='Login']

使用WebDriverWait进行编码:

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(20));
wait.Until(ExpectedConditions.ElementToBeClickable(By.Xpath("//button[text()='Login']"))).Click();  

不同的方法:

使用Action类并将焦点移到特定元素。

using OpenQA.Selenium;
using OpenQA.Selenium.Interactions;

Actions actions = new Actions(driver);
actions.MoveToElement(element);
actions.Click().Perform();  

在这种情况下,这将是元素:wait.Until(ExpectedConditions.ElementToBeClickable(By.Xpath("//button[text()='Login']")))