有没有办法在不使用xpath / id / css的情况下自动使用selenium webdriver?

时间:2017-03-10 13:20:40

标签: java selenium-webdriver

我正在尝试使用 Selenium Webdriver 自动化测试,而不需要xpath。当站点被修改然后xpath被更改时,我遇到问题。对于需要执行某些操作的元素(如按钮,下拉等),它需要xpath或其他一些东西来识别该元素。如果我想从站点获取数据(表内容)以验证其执行,那么在这里我需要大量的xpath来完成。 有没有更好的方法来避免某些xpath?

3 个答案:

答案 0 :(得分:0)

您可以通过css选择器映射元素,而不是使用 xpath ,如下所示:

driver.findElement(By.cssSelector(“css selector”) OR

ID,如下:

driver.findElement(By.id( “coolestWidgetEvah”))

除此之外还有更多2.请参阅Selenium docomentation

答案 1 :(得分:0)

史蒂文,你基本上有两种选择,就像我看到它一样。一种方法是将您自己的属性(例如 qa attrib)注入您的Web元素,这些元素永远不会改变。请参阅这篇文章,了解如何实现这一目标:

Selenium: Can I set any of the attribute value of a WebElement in Selenium?

或者你仍然可以使用'naked'xpath来定位你的元素。 “裸”是指泛型,所以不那么具体。

考虑下面这个元素:

  

div id =“username”
  input class =“usernameField”

     

按钮类型='提交

所以,不要像这样定位(具体/具有侵略性):

  

// DIV [@ ID = '用户名'] //输入[@类= 'usernameField'] //按钮[@类型= '提交']

您可以使用更温和的方法,省略特定值,如下所示:

  

// DIV [@id] //输入[@class] //按钮[@type]

不太可能在变化时破坏。但是,请注意,您需要100%确定使用第二种方法,您将找到一个独特的元素。在其他情况下,如果有多个按钮,则可能会选择错误的按钮或导致Selenium异常。

我会推荐Chrome的这个Xpath助手加载项,当xpath正确时会在屏幕上突出显示,并且还会显示有多少元素与Xpath匹配(即唯一或不唯一?)

xpath Helper

希望以上,有道理,不要犹豫,问它是否没有!

祝你好运!

答案 2 :(得分:0)

Ofcoarse还有其他一些方法,不使用id / xpath / CSS甚至" sendKeys"。解决方案是通过Sikuli做到这一点。

要做的事情:

  1. 你必须下载Sikuli exe jar(sikulixsetup-1.1.0)。 (来自https://launchpad.net/sikuli/+download

  2. 安装Sikuli exe jar,提取" sikulixapi"并添加到PATH变量。

  3. 添加外部jar" sikulixapi"通过Eclipse在项目级别。

  4. 现在拍摄要传递某些文字或点击的元素的图像。

  5. 使用Selenium Java代码中的图像参考来编写文本&执行点击。

  6. 这是一个简单的代码,可以浏览" https://www.google.co.in/"转到登录页面&输入Emailid&没有任何xpath或sendkeys的密码。

    package SikuliDemo;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.sikuli.script.Pattern;
    import org.sikuli.script.Screen;
    
    public class SikuliDemoScript {
    
        public static void main(String[] args) throws Exception
        {
    
            Screen screen = new Screen();
    
            Pattern image1 = new Pattern("C:\\Utility\\OP_Resources\\Sikuli_op_images\\gmailLogo.png");
            Pattern image2 = new Pattern("C:\\Utility\\OP_Resources\\Sikuli_op_images\\gmailSignIn.png");
            Pattern image3 = new Pattern("C:\\Utility\\OP_Resources\\Sikuli_op_images\\Email.png");
            Pattern image4 = new Pattern("C:\\Utility\\OP_Resources\\Sikuli_op_images\\EmailNext.png");
            Pattern image5 = new Pattern("C:\\Utility\\OP_Resources\\Sikuli_op_images\\Password.png");
            Pattern image6 = new Pattern("C:\\Utility\\OP_Resources\\Sikuli_op_images\\SignIn.png");
    
            System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
            WebDriver driver = new ChromeDriver();
            driver.manage().window().maximize();
            driver.get("https://www.google.co.in/");
    
            screen.wait(image1, 10);
            screen.click(image1);
            screen.wait(image2, 10);
            screen.click(image2);
            screen.type(image3, "selenium");
            screen.click(image4);
            screen.wait(image5, 10);
            screen.type(image5, "admin123");
            screen.click(image6);
    
            driver.quit();      
        }
    
    }
    

    如果这回答了你的问题,请告诉我。