Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >硒FindElement函数的通用方法

硒FindElement函数的通用方法
EN

Stack Overflow用户
提问于 2017-04-13 13:03:26
回答 3查看 2.7K关注 0票数 0

因此,我创建了这个通用的find元素函数:

代码语言:javascript
运行
AI代码解释
复制
    public static IWebElement FindElement(IWebDriver driver, Func<IWebDriver, IWebElement> expectedCondtions, int timeoutInSeconds)
    {
        WebDriverWait webDriverWait = CreateWebDriverWait(driver, finder,timeoutInSeconds);
        webDriverWait.IgnoreExceptionTypes(typeof(NoSuchElementException));
        return webDriverWait.Until(expectedCondtions);
    }

    public static ReadOnlyCollection<IWebElement> FindElements(IWebDriver driver, Func<IWebDriver, ReadOnlyCollection<IWebElement>> expectedCondtions, int timeoutInSeconds)
    {           
        WebDriverWait webDriverWait = CreateWebDriverWait(driver, finder, timeoutInSeconds);
        webDriverWait.IgnoreExceptionTypes(typeof(NoSuchElementException));            
        return webDriverWait.Until(expectedCondtions);
    } 

    private static WebDriverWait CreateWebDriverWait(IWebDriver driver, IWebElement finder, int timeoutInSeconds)
    {
        WebDriverWait webDriverWait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds));
        webDriverWait.IgnoreExceptionTypes(typeof(NoSuchElementException));
        return webDriverWait;
    }

用法:

代码语言:javascript
运行
AI代码解释
复制
        IWebElement element=
            WaitAndFindElement(
            driver,
            ExpectedConditions.ElementIsVisible(By.CssSelector("...")),
            120);

现在,我想添加一个选项,以查找也不使用elementdriver。例如,我想从另一个driver.FindElement中搜索元素,而不是element

代码语言:javascript
运行
AI代码解释
复制
IWebElemen element = ...
element.FindElement...

因此,我想将我的函数签名更改为:

代码语言:javascript
运行
AI代码解释
复制
IWebElement FindElement(IWebDriver driver,Func<IWebDriver, IWebElement> expectedCondtions, int timeoutInSeconds)

至:

代码语言:javascript
运行
AI代码解释
复制
IWebElement FindElement(IWebDriver driver, IWebElement finder, Func<IWebDriver, IWebElement> expectedCondtions, int timeoutInSeconds)

如果finder为null,我希望使用driver.FindElement进行搜索。否则:finder.FindElement

所以我的问题是如何做到这一点?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-04-14 02:51:23

代码语言:javascript
运行
AI代码解释
复制
Class WebElementFinder
{
   public static IWebElement FindElement(ISearchContext sc, By locator, Func<IWebElement, bool> elementCondition = null, int timeOutInceconds = 20)
        {
            DefaultWait<ISearchContext> wait = new DefaultWait<ISearchContext>(sc);
            wait.Timeout = TimeSpan.FromSeconds(timeOutInceconds);
            wait.PollingInterval = TimeSpan.FromSeconds(3);
            wait.IgnoreExceptionTypes(typeof(NoSuchElementException));

            return  wait.Until(x => GetElement(x, locator, elementCondition));
        }

        private static IWebElement GetElement(ISearchContext sc, By locator, Func<IWebElement, bool> elementCondition = null)
        {
             IWebElement webElement = sc.FindElement(locator);
             if(elementCondition != null)
            {
                if (elementCondition(webElement))
                    return webElement;
                else
                    return null;
            }
             else
            {
                return webElement;
            }
        }
}

用法:

代码语言:javascript
运行
AI代码解释
复制
 Func<IWebElement, bool> isElementVisible = (webElement) => webElement.Displayed;
            var element = FindElement(driver, By.Id("name_10"), isElementVisible);
票数 1
EN

Stack Overflow用户

发布于 2017-04-13 14:19:19

这很好:我在工作中遇到过类似的情况,这就是我在C#中所做的:

代码语言:javascript
运行
AI代码解释
复制
IWebElement FindElement(IWebDriver driver, Func<IWebDriver, IWebElement> expectedCondtions, int timeoutInSeconds, IWebElement finder = null)

这意味着"finder“的默认值为null,您可以使用或不指定它来调用函数。(可以向所有方法添加具有默认值的此参数)

然后,您可以在函数中简单地执行一个简单的if语句,以确定如何找到元素。

代码语言:javascript
运行
AI代码解释
复制
if(finder != null)
{
    //use finder instead of driver and return
}
//Otherwise use driver
票数 0
EN

Stack Overflow用户

发布于 2017-04-13 21:18:56

我认为如果你想把它变得通用的话,你不需要让它变得复杂。下面是解决这个问题的代码

代码语言:javascript
运行
AI代码解释
复制
Class WebElementFinder
{
 private static IWebElement FindElement(ISearchContext sc, By locator, int timeOutInceconds = 20)
        {
            DefaultWait<ISearchContext> wait = new DefaultWait<ISearchContext>(sc);
            wait.Timeout = TimeSpan.FromSeconds(timeOutInceconds);
            wait.IgnoreExceptionTypes(typeof(NoSuchElementException));
            return wait.Until(x => GetElement(x, locator));
        }

        private static IWebElement GetElement(ISearchContext sc, By locator)
        {
           return sc.FindElement(locator);
        }
}

让我解释一下这段代码的某些部分,它将帮助您理解您提到的代码的问题。

  1. 如果您使用webdriver,那么它是从DefaultWait类驱动的,它将IWebDriver转换为泛型类型。因此,直到方法将对使用驱动程序对象有限制。
  2. 如果在方法中使用Func,那么每个调用方法都需要为find元素创建函数。但是,您可以使用它作为可选参数。

现在回到我的代码片段。我使用了DefaultWait,它既可以用于WebDriver,也可以用于IWebElement。两者都是从ISearchContext驱动的。按照您在文章中的要求,定位器将帮助在驱动程序/ IWebElement对象上查找web元素。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43401676

复制
相关文章
实现两个N*N矩阵的乘法,矩阵由一维数组表示
实现两个N*N矩阵的乘法,矩阵由一维数组表示。 先介绍一下矩阵的加法: 1 void Add(int rows, int cols) 2 { 3 for(int i= 0;i<rows;i++) 4 { 5 for(int j=0;j<cols;j++) 6 result[i][j]=mat1[i][j]+mat2[i][j]; 7 } 8 } 若两个矩阵要做乘法运:只有在一
猿人谷
2018/01/17
1.4K0
实现两个N*N矩阵的乘法,矩阵由一维数组表示
实现两个N*N矩阵的乘法,矩阵由一维数组表示。 先介绍一下矩阵的加法: 1 void Add(int rows, int cols) 2 { 3 for(int i= 0;i<rows;i++) 4 { 5 for(int j=0;j<cols;j++) 6 result[i][j]=mat1[i][j]+mat2[i][j]; 7 } 8 } 若两个矩阵要做乘法运:只有在一
猿人谷
2018/01/17
1.3K0
实现两个N*N矩阵的乘法,矩阵由一维数组表示
实现两个N*N矩阵的乘法,矩阵由一维数组表示。 先介绍一下矩阵的加法: 1 void Add(int rows, int cols) 2 { 3 for(int i= 0;i<rows;i++) 4 { 5 for(int j=0;j<cols;j++) 6 result[i][j]=mat1[i][j]+mat2[i][j]; 7 } 8 } 若两个矩阵要做乘法运:只有在一
猿人谷
2018/01/17
2.3K0
矩阵乘法
#include <stdio.h> #include <stdlib.h> #include <math.h> #define LEN 3
WindCoder
2018/09/20
8440
[每日一题]矩阵乘法
本次的题目来源于C语言网比赛栏目八月月赛第一题,记得去试试看看自己能不能AC哦!!! 题目描述 给定一个N阶矩阵A,输出A的M次幂(M是非负整数) 例如: A = 1 2 3 4 A的2次幂 7 10 15 22 输入 第一行是一个正整数N、M(1< =N< =30, 0< =M< =5),表示矩阵A的阶数和要求的幂数 接下来N行,每行N个绝对值不超过10的非负整数,描述矩阵A的值 输出 输出共N行,每行N个整数,表示A的M次幂所对应的矩阵。相邻的数之间用一个空格隔开
编程范 源代码公司
2018/04/18
1.3K0
java矩阵类,矩阵的乘法
问题如下 矩阵成积.jpg 我采用的是3重循环,先计算的列的结果,应该还可以先计算行的结果,然后求出矩阵的乘法。没有过多的技巧,就是循环的使用。 相关的code package day20180
热心的社会主义接班人
2018/08/02
1.6K0
java矩阵类,矩阵的乘法
09:矩阵乘法
09:矩阵乘法 总时间限制: 1000ms 内存限制: 65536kB描述 计算两个矩阵的乘法。n*m阶的矩阵A乘以m*k阶的矩阵B得到的矩阵C 是n*k阶的,且C[i][j] = A[i][0]*B[0][j] + A[i][1]*B[1][j] + …… +A[i][m-1]*B[m-1][j](C[i][j]表示C矩阵中第i行第j列元素)。 输入第一行为n, m, k,表示A矩阵是n行m列,B矩阵是m行k列,n, m, k均小于100 然后先后输入A和B两个矩阵,A矩阵n行m列,B矩阵m行k列,
attack
2018/04/03
1.7K0
理解矩阵乘法
大多数人在高中,或者大学低年级,都上过一门课《线性代数》。这门课其实是教矩阵。 刚学的时候,还蛮简单的,矩阵加法就是相同位置的数字加一下。 矩阵减法也类似。 矩阵乘以一个常数,就是所有位置都乘以这个数
ruanyf
2018/04/13
1.5K0
理解矩阵乘法
矩阵乘法问题
问题描述 给定n个矩阵:A1,A2,...,An,其中Ai与Ai+1是可乘的,i=1,2...,n-1。确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。 ---- 矩阵乘法
我没有三颗心脏
2018/04/26
1.5K0
矩阵乘法问题
矩阵乘法的java实现
文章目录 1、算法思想 2、代码实现 1、算法思想 最近老是碰到迭代问题,小数太多手算又算不过来,写个矩阵乘法辅助一下吧。 有两个矩阵A和B,计算矩阵A与B相乘之后的结果C。 A的列数必须等于B的行数 用矩阵A的第i行的值分别乘以矩阵B的第J列,然后将结果相加,就得到C[i][j]。 矩阵A的行等于C的行,矩阵B的列等于C的列,这两个数值用来控制循环的次数,但是每一步中需要把行和列中对应的乘机求和,所以再加一个内循环控制乘法求和就行。 下面我们进行矩阵乘法的测试 A = \begin{
别团等shy哥发育
2023/02/25
1.8K0
矩阵乘法的java实现
算法系列-----矩阵(四)-------------矩阵的乘法
而如果该函数被下面调用了,已经判断了a的长度和b的长度是相等的,所以这里只是单独的抽出来而已
wust小吴
2022/03/04
5160
详解Python中的算术乘法、数组乘法与矩阵乘法
(2)列表、元组、字符串这几种类型的对象与整数之间的乘法,表示对列表、元组或字符串进行重复,返回新列表、元组、字符串。
Python小屋屋主
2021/05/11
9.6K0
详解Python中的算术乘法、数组乘法与矩阵乘法
[动态规划] 矩阵链乘法问题
矩阵链乘法问题是指给定一串矩阵序列M₁M2..Mn,求至少需要进行多少次乘法运算才能求得结果
racaljk
2018/08/31
1.8K0
[动态规划] 矩阵链乘法问题
Python|详解矩阵乘法
矩阵相信大家都知道,是线性代数中的知识,就是一系列数集。顾名思义,数字组成的矩形,例如:
算法与编程之美
2020/03/25
2.6K0
彻底理解矩阵乘法
今天的角度比较清奇,我们来讲讲矩阵的乘法。当然了,我告诉你的肯定不是大学教科书上那些填鸭式的云里雾里的计算规则,你可能将规则背下来了,但完全不理解为什么会这样。别怕,我将会在这篇文章中为你带来矩阵乘法的全新体验,就算你大学时代学的高数全忘了也能看懂这篇文章。
米开朗基杨
2019/12/06
1.8K0
彻底理解矩阵乘法
算法训练 矩阵乘法
问题描述   输入两个矩阵,分别是m*s,s*n大小。输出两个矩阵相乘的结果。 输入格式   第一行,空格隔开的三个正整数m,s,n(均不超过200)。   接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j)。   接下来s行,每行n个空格隔开的整数,表示矩阵B(i,j)。 输出格式   m行,每行n个空格隔开的整数,输出相乘後的矩阵C(i,j)的值。 样例输入 2 3 2 1 0 -1 1 1 -3 0 3 1 2 3 1 样例输出 -3 2 -8 2
AI那点小事
2020/04/20
6680
算法训练 矩阵乘法
基础练习 矩阵乘法
  给定一个N阶矩阵A,输出A的M次幂(M是非负整数)   例如:   A =   1 2   3 4   A的2次幂   7 10   15 22
刘开心_1266679
2019/02/14
8840
#100. 矩阵乘法
矩阵乘法 内存限制:256 MiB时间限制:2000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 这是一道模板题。 分别给定 n×p n \times pn×p 和 p×m p \times mp×m 的两个矩阵 A AA 和 B BB,求 A×B A \times BA×B。 输入格式 第一行三个正整数 n nn、p pp、m mm,表示矩阵的长宽。 之后的 n nn 行,每行 p pp 个整数,表示矩阵 A AA。 之后的 p pp 行,每
attack
2018/04/11
1.9K0
#100. 矩阵乘法
Java-矩阵乘法
"Never, never, never, never give up."  -----Winston Leonard Spencer Churchill
圆号本昊
2021/09/24
9210
Java-矩阵乘法
matlab 稀疏矩阵 乘法,Matlab 矩阵运算[通俗易懂]
说明:这一段时间用Matlab做了LDPC码的性能仿真,过程中涉及了大量的矩阵运算,本文记录了Matlab中矩阵的相关知识,特别的说明了稀疏矩阵和有限域中的矩阵。Matlab的运算是在矩阵意义下进行的,这里所提到的是狭义上的矩阵,即通常意义上的矩阵。
全栈程序员站长
2022/09/12
3.1K0

相似问题

矩阵循环乘法

25

矩阵乘法循环

20

N维矩阵乘法python

23

cupy矩阵乘法n次

129

n*n矩阵乘法需要多少步?

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档