【问题标题】:Selenium 2 WebDriver not able to find linkSelenium 2 WebDriver 找不到链接
【发布时间】:2011-12-04 06:47:31
【问题描述】:

我看到了关于类似/相同问题的其他问题,但它们并没有帮助我解决问题 :(。我登录到生产站点。说 (http://www.site.com/log)。我想在那之后点击一个链接,但 Selenium找不到链接。相关的 HTML 部分是:

<div style="display:none" id="managers">
             <a class="projectManager" style="color:black"> Project Manager</a>

             <a class="transportManager"> Transport Manager</a>
         </div>

java代码如下:

import java.util.regex.Pattern;
import java.util.concurrent.TimeUnit;
import org.junit.*;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.support.ui.Select;

public class test {
    private WebDriver driver;
    private String baseUrl="";
    private StringBuffer verificationErrors = new StringBuffer();
    @Before
    public void setUp() throws Exception {
        //driver = new FirefoxDriver();
        //driver.manage().timeouts().implicitlyWait(45, TimeUnit.SECONDS);
        DesiredCapabilities chromeCapabilities = DesiredCapabilities.chrome();

        String chromeBinary = System.getProperty(" ");
        if (chromeBinary == null || chromeBinary.equals("")) {
            String os = System.getProperty("os.name").toLowerCase().substring(0, 3);
            chromeBinary = "lib/chromedriver-" + os + (os.equals("win") ? ".exe" : "");
            System.setProperty("webdriver.chrome.driver", chromeBinary);
        }
        driver=new ChromeDriver(chromeCapabilities);
        driver.manage().timeouts().implicitlyWait(70,TimeUnit.SECONDS);
    }

    @Test
    public void testEmployee() throws Exception {
        driver.get("http://www.site.com/log");
        driver.findElement(By.name("j_username")).clear();
        driver.findElement(By.name("j_username")).sendKeys("username");
        driver.findElement(By.name("j_password")).clear();
        driver.findElement(By.name("j_password")).sendKeys("password");
        driver.findElement(By.cssSelector("input[name=\"login\"]")).click();
        Thread.sleep(10000);

        driver.findElement(By.linkText(" Project Manager")).click();
        driver.findElement(By.linkText("Sign Out")).click();
        System.out.println("Test done");
        }
    @After
    public void tearDown() throws Exception {
        driver.quit();
        String verificationErrorString = verificationErrors.toString();
        if (!"".equals(verificationErrorString)) {
            fail(verificationErrorString);
        }
    }

    private boolean isElementPresent(By by) {
        try {
            driver.findElement(by);
            return true;
        } catch (NoSuchElementException e) {
            return false;
        }
    }
}

问题:错误是什么?它给出了“找不到元素”异常

谢谢。

【问题讨论】:

  • 你检查浏览器的版本,看看它是否被 selenium 支持?
  • 是的。它是 。它能够点击谷歌链接并做一些其他的事情。
  • 哪一行实际上给出了“找不到元素”异常?
  • driver.findElement(By.linkText("项目经理")).click();

标签: java eclipse selenium


【解决方案1】:

尝试使用以下..

driver.findElement(By.partialLinkText(" Project Manager")).click();
driver.findElement(By.partialLinkText("Sign Out")).click();

希望这行得通。

【讨论】:

  • 嘿,这就是我所做的。但是,我想知道为什么这行得通,而其余的行不通:(?
  • 好吧......听着,就是这样......当你指定 By.linkText("someelement");这里的“一些元素”应该是代码中指定的,我的意思是说,在你的代码中有一个名为 Project Manager 的链接,它可能包含一些 &nbsp(space) 字符。因此硒驱动程序匹配精确搜索,因此它没有找到该元素。因此,在这种情况下,您应该尝试部分匹配元素,这是使用 By.partialLinkText("SomeElement") 完成的。很高兴听到它运作良好..
  • 6 年后,在 VBA 中,这成功了!我从来没有注意到“PartialLink”作为一个选项,但这正是我想要的。谢谢,@AmitHorakeri!
【解决方案2】:

我的理解: 我想你在这里寻找链接“项目经理”。

第 1 步: 链接文本将不支持 Always.So Go with CSS Selector

项目经理的 CSS 选择器:css=.projectManager

第 2 步:

执行点击

driver.findElement(By.cssSelector(".projectManager")).click();

AlterNative 方法来点击

driver.findElement(By.className("projectManager")).click();
driver.findElement(By.partialLinkText("Project Manager")).click();

如果你有一个 CSS 类,你应该更喜欢这个解决方案,而不是通过链接文本来查找元素,因为它更加稳定,也可以在多语言 UI 上使用

谢谢!

【讨论】:

    【解决方案3】:

    如何删除链接文本字符串中的空白? 你有

    driver.findElement(By.linkText(" Project Manager")).click();
    

    试试

    driver.findElement(By.linkText("Project Manager")).click();
    

    HTML 不计算空格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-08
      • 2013-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-11
      相关资源
      最近更新 更多