标签: webdriver

在C#中使用Selenium Webdriver查找按钮组类中的按钮

我的最终目标是能够在网页上单击"是"或"否".

使用fire bug我可以看到Yes和No按钮位于名为"btn-group"的类中

<div class="btn-group btn-group-default answer-toggle" aria-label="..." role="group">
     <button class="btn ng-pristine ng-valid active btn-secondary ng-touched" btn-radio="true" ng-model="consultation.previousSoundVoid" ng-class="{'btn-secondary': consultation.previousSoundVoid}" type="button">
          Yes
     </button>
     <button class="btn ng-pristine ng-untouched ng-valid" btn-radio="false" ng-model="consultation.previousSoundVoid" ng-class="{'btn-secondary': consultation.previousSoundVoid == false}" type="button">
          No
     </button>
</div>
Run Code Online (Sandbox Code Playgroud)

我想我可以通过XPath找到Element,但我正在努力提高我的Selenium技能.

我希望有一种方法可以先找到"btn-group"类,然后在某种程度上选择Yes或No.

或者能够为"是"和"否"选项创建变量.如果我做:

var button = Driver.Instance.FindElements(By.ClassName("btn"));
Run Code Online (Sandbox Code Playgroud)

它返回21个选项.我找到:

button[15].Text     returns "Yes"
button[16].Text     returns "No"
Run Code Online (Sandbox Code Playgroud)

而不是必须查看所有21个结果并担心索引是否发生变化,我可以通过某种方式按文本搜索结果吗?

c# selenium webdriver selenium-webdriver

1
推荐指数
1
解决办法
7636
查看次数

XPATH和元素的文本不断更新,识别元素的最佳方法是什么

这是第一次加载页面时元素x的XPath:

.//*[@id='001g000000YJnpR_00Nb0000004Lzej_body']/table/tbody/tr[3]/td[3]
Run Code Online (Sandbox Code Playgroud)

此页面上的文字是:"text1".

这是第二次加载时相同元素x的XPath:

//*[@id="001g000000YJnm8_00Nb0000004Lzej_body"]/table/tbody/tr[3]/td[3]
Run Code Online (Sandbox Code Playgroud)

此页面上的文字是:"text2".

元素没有名称或ID,这里是HTML代码: '<'td class="dataCell">vxgkVwD7JvnOBKaGCIS7'<'/td'>'

请协助.

selenium xpath webdriver selenium-webdriver

1
推荐指数
1
解决办法
124
查看次数

如何使用List <WebElement> webdriver

我正在为一些网站创建一个自动测试,我正在使用WebDriver,TestNG和用Java编写的代码.在页面上显示类别的注册,在括号中是拍卖的数量,我需要将此数字作为变量.

我用这个代码

By bycss =By.cssSelector(".list.list-categories>li:first-child");
WebElement number1_1_vse = driver.findElement(bycss );
String text_vse1_1 = number1_1_vse.getText();
Run Code Online (Sandbox Code Playgroud)

但我得到的只是第一个数字,我需要得到所有.有人告诉我,我应该使用List.但是当我使用它时,我只能得到它

[[[[[[[FirefoxDriver: firefox on WINDOWS (7e6e0d0f-5cbb-4e48-992f-26d743a321a5)] -> css selector: .list.list-categories>li:first-child]] -> xpath: ..]] -> xpath: .//*], [[[[[[FirefoxDriver: firefox on WINDOWS (7e6e0d0f-5cbb-4e48-992f-.....
Run Code Online (Sandbox Code Playgroud)

码:

By bycss2 =By.cssSelector(".list.list-categories>li:first-child");
WebElement number1_1_vse2 = driver.findElement(bycss2 );
WebElement parent1 = number1_1_vse2.findElement(By.xpath(".."));
List<WebElement> childs1 = parent1.findElements(By.xpath(".//*"));
System.out.println(childs1);
Run Code Online (Sandbox Code Playgroud)

链接到该网站

截图 - >带有数字的图片

有人可以告诉我吗?

java testng parents webdriver list

1
推荐指数
1
解决办法
8万
查看次数

以编程方式运行TestNG时,如何从测试类中获取@Test方法

我正在创建一个应用程序,以编程方式执行我们的java webdriver硒脚本。我们使用TestNG。

我可以使用虚拟XML文件启动类。这有效

    XmlSuite suite = new XmlSuite();
    suite.setName("TmpSuite");

    XmlTest test = new XmlTest(suite);
    test.setName("TmpTest");
    List<XmlClass> classes = new ArrayList<XmlClass>();

    Map<String, String> parameters = new HashMap<String, String>(); 
    parameters.put("browser", "Firefox"); 
    suite.setParameters(parameters);

    classes.add(new XmlClass("package.classname"));
    test.setXmlClasses(classes) ;

    List<XmlSuite> suites = new ArrayList<XmlSuite>();
    suites.add(suite);
    TestNG tng = new TestNG();
    tng.setXmlSuites(suites);
    tng.run();
Run Code Online (Sandbox Code Playgroud)

由于上述方法使用package.classname来执行该类,因此我需要一种获取所有类的方法。它们的包和类名(我们有数百个包)。

我使用此代码来抓取所有package.classnames。在简单地扫描项目的/ bin /目录中,将文件夹结构转换为程序包名称,并从类文件中删除.class扩展名。这个作品,太:

    //scans the /bin directory of project to grab all packages/classes

    String binPath = "V:\\Selenium\\Scripts\\bin\\";
    File dir = new File(binPath);

    List<File> files …
Run Code Online (Sandbox Code Playgroud)

java testng selenium webdriver

1
推荐指数
1
解决办法
2370
查看次数

不知道为什么要使用无头浏览器

我们只是在不使用无头浏览器的情况下实现了CI,而是实际的浏览器.因此,一旦开发团队检查了新代码.我们的烟雾自动化代码在自动机器上作为后台进程运行并发送结果.如果有任何失败,它会发送截图.我们没有得到的是,使用无头浏览器进行上述处理的优势是什么.我们需要我们的烟雾脚本来获得这种覆盖.比如使用Select,Calendar,Uploaded等控件提交一个可以在5分钟内运行的大型表单,而不是简单的网页加载.

c# selenium webdriver headless selenium-webdriver

1
推荐指数
1
解决办法
1343
查看次数

获取Web表中的行数 - Selenium WebDriver Java

我正在使用java工作selenium webdriver.我正面临一个问题.我有一个Web表,我有添加事件功能的测试用例,它成功地在表中添加了事件.现在我想断言/验证我是否在我的表中添加了添加的事件(因为如果功能被破坏,那么日期将不会添加到表中,并且我可能故意失败该测试).在测试用例开始之前,事件的数量是未知的.我对此测试用例验证的逻辑如下:

  1. 在表中添加事件.添加事件的代码是:

    public void addIndividualEvent(String eventDate, String eventName) throws Exception
    {
        driver.findElement(individualEventDate).sendKeys(eventDate);
        driver.findElement(individualEventName).sendKeys(eventName);
        driver.findElement(addIndividualEventBtn).click();
    }
    
    Run Code Online (Sandbox Code Playgroud)

    现在,在此步骤之后,表中可能已存在多个事件.所以我的下一步将是.

  2. 查找表中的行数.

  3. 构造一个遍历每一行的for循环并获取日期字段的文本.
  4. 将for循环的结果添加到列表中.
  5. 然后是Assert.assertEquals(List,eventDate); 会告诉我我添加的事件是否在表格中.

现在,下面是我网站中表格的HTML代码.

<table class="table table-condensed table-hover event-list">
    <tbody>
        <tr class="study-event-row ng-scope" ng-repeat="event in events | orderBy:'-date'">
        <tr class="study-event-row ng-scope" ng-repeat="event in events | orderBy:'-date'">
        <tr class="study-event-row ng-scope" ng-repeat="event in events | orderBy:'-date'">
    </tbody>
</table>
Run Code Online (Sandbox Code Playgroud)

我能够构建xpath,突出显示表中可用的所有行.

xpath = //table[@class='table table-condensed table-hover event-list']/tbody/tr
Run Code Online (Sandbox Code Playgroud)

现在我面临的问题是我不知道如何使用这个xpath来获取我的表中的行数.我尝试使用,xpath.getSize();但这返回了表的尺寸而不是实际的数量.

谁能告诉我怎样才能获得行数?谢谢

java selenium webdriver

1
推荐指数
1
解决办法
5万
查看次数

使用java测量网页的总加载时间

我正在创建一个应用程序来检查页面加载所需的时间.到目前为止,我有这样的事情:

long startTime = System.currentTimeMillis();
//load page and wait for it to finish
long elapsedTime = System.currentTimeMillis() - startTime;
Run Code Online (Sandbox Code Playgroud)

现在,我不只想测量html文档加载的时间,而是整个dom.基本上,如果它在浏览器中,我希望它能够测量加载微调器停止所需的时间.

我该怎么做才能做到最好?我正在尝试WebDriver,但它似乎并不一致; 有时它会在仍然加载东西时考虑完成页面(我也尝试了隐式等待).

java selenium webdriver

1
推荐指数
1
解决办法
3085
查看次数

量角器等待条件不应该在超时后失败

ExpectedConditions.visibilityOf如果元素不可见,是否可以在没有失败的情况下等待?我想处理的情况,其中一个按钮的威力已经通过动画变得可见,点击它拿走.

browser.wait(conditions.visibilityOf(button), 500).then(function (visible) {
    if (visible) {
        return button.click().then(function () {/*...*/});
    }
});
Run Code Online (Sandbox Code Playgroud)

javascript webdriver angularjs selenium-webdriver protractor

1
推荐指数
1
解决办法
1496
查看次数

WebDriver:如何等待文本在元素中消失

我有一个动态更改其文本的字段.我需要一种等待文本更改的方法.我不知道会出现什么文字,但我知道目前有哪些文字.所以我想等待它消失在元素中.有办法吗?

webdriver selenium-webdriver

1
推荐指数
1
解决办法
3467
查看次数

当有多个具有相同属性和文本的元素时,如何识别Xpath?

我需要点击"客户一"的链接.目前我正在使用

//div[contains(@class,'client-info') and contains(div/text(),'Customer')] 
Run Code Online (Sandbox Code Playgroud)

使用Firepath,这将返回四个单独的元素(我附加了包含其中两个的代码),我认为这就是为什么Selenium Webdriver无法找到我想要单击的元素.

我需要单击此xpath的最后一个实例,但它似乎不可能更具体,因为它们具有相同的类和内部文本!

<div class="wg-client-row-mobile hidden-sm hidden-md hidden-lg">
<div class="row">
<div class="col-xs-11">
<span class="icon icon-user" ng-class="{'icon-user': !wgClientItemCtrl.client.isAnOrganization, 'icon-business': wgClientItemCtrl.client.isAnOrganization}"/>
<div class="client-info">
<div class="client-name not-long-text ng-binding">Customer One</div>
<!-- <div class="client-age not-long-text" ng-if="!wgClientItemCtrl.client.isAnOrganization">{{wgClientItemCtrl.client.gender}}, {{wgClientItemCtrl.client.calculatedAge | notAvailable}}</div> -->
<!-- ngIf: !wgClientItemCtrl.client.isAnOrganization -->
<div class="client-age not-long-text ng-binding ng-scope" ng-if="!wgClientItemCtrl.client.isAnOrganization">
<!-- end ngIf: !wgClientItemCtrl.client.isAnOrganization -->
<!-- ngIf: wgClientItemCtrl.client.isAnOrganization -->
<div class="client-age not-long-text ng-binding">
</div>
</div>
<div class="favorite-right-container">
</div>
</div>
<div class="wg-client-row-desktop hidden-xs hidden-is">
<div class="row content">
<div class="col-sm-4">
<div class="icon icon-user" …
Run Code Online (Sandbox Code Playgroud)

html xml selenium xpath webdriver

1
推荐指数
1
解决办法
1450
查看次数