首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不同名称的XPath的可重用性

不同名称的XPath的可重用性
EN

Stack Overflow用户
提问于 2021-04-19 16:56:44
回答 2查看 41关注 0票数 0

我有一个模式,在那个模式中有各种卡片。那些卡片掉了。看上去有点像下面的截图。他们都有不同的名字。有没有办法用C#编写方法,这样我就不必为所有下拉列表做//select@name=‘test1a’或//select@name='test1b‘?

下面的HTML代码

代码语言:javascript
运行
复制
<table class="row-inner-table" border="0" cellpadding="1" cellspacing="1">
    <tbody>
        <tr class="row-content">
            <td class="field-name">test1a</td>
            <td class="field-value">
                <select name="test-4" onchange="calc(document.myForm.TOTAL_8,this,24)">
                    <option value="" score="0"> </option>
                    <option value="118" score="0">test1b </option>
                    <option value="124" score="1">test1c</option>
                    <option value="120" score="2">test1d</option>
                </select>
                <input type="HIDDEN" name="PREVIOUS_24" value="0">
            </td>
        </tr>
        <tr class="row-content">
            <td class="field-name">test2</td>
            <td class="field-value">
                <select name="test-5" onchange="calc(document.myForm.TOTAL_8,this,25)">
                    <option value="" score="0"> </option>
                    <option value="121" score="0">hi</option>
                    <option value="113" score="1">hello</option>
                    <option value="114" score="2">C ya </option>
                </select>
                <input type="HIDDEN" name="PREVIOUS_25" value="0">
            </td>
        </tr>
        <tr class="row-content">
            <td class="field-name">test 3</td>
            <td class="field-value">
                <select name="test-6" onchange="calc(document.myForm.TOTAL_8,this,26)">
                    <option value="" score="0"> </option>
                    <option value="123" score="0">hehe</option>
                    <option value="112" score="1">haha</option>
                    <option value="119" score="2">001</option>
                </select>
                <input type="HIDDEN" name="PREVIOUS_26" value="0">
            </td>
        </tr>
        <tr class="row-content">
            <td class="field-name">test4</td>
            <td class="field-value">
                <select name="test-7" onchange="calc(document.myForm.TOTAL_8,this,27)">
                    <option value="" score="0"> </option>
                    <option value="111" score="0">404</option>
                    <option value="122" score="1">402/option>
                        <option value="117" score="2">403</option>
                </select>
                <input type="HIDDEN" name="PREVIOUS_27" value="0">
            </td>
        </tr>
        <tr class="row-content">
            <td class="field-name">test 5 </td>
            <td class="field-value">
                <select name="test-8" onchange="calc(document.myForm.TOTAL_8,this,28)">
                    <option value="" score="0"> </option>
                    <option value="115" score="0">Relaxed</option>
                    <option value="125" score="1">Tense, rigid</option>
                    <option value="116" score="2">Very tense or rigid</option>
                </select>
                <input type="HIDDEN" name="PREVIOUS_28" value="0">
            </td>
        </tr>
        <tr class="row-content-total">
            <td class="field-name total-label">Total</td>
            <td class="field-value">
                <input type="TEXT" size="5" name="TOTAL_8" value="0">
            </td>
        </tr>
    </tbody>
</table>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-19 17:08:03

应该像这样的事情一样简单

代码语言:javascript
运行
复制
public SelectElement dropdownElement(By locator)
{
   return new SelectElement(driver.FindElement(locator));
}

你把它叫做

代码语言:javascript
运行
复制
SelectElement select = dropdownElement(By.CssSelector("select[name='test-5']"));
票数 0
EN

Stack Overflow用户

发布于 2021-04-19 17:33:26

下面是C.C.Peck解决方案的另一个版本,它将减少重复的Xpath (或CSS)字符串代码,假设Xpath的基础始终与OP中的相同

代码语言:javascript
运行
复制
public SelectElement SelectMenuItem(string menuValue)
{
    var menuString = $"//select[@name='{menuValue}']";
    return new SelectElement(driver.FindElement(By.XPath(menuString)));
}

SelectElement selectOne = SelectMenuItem("test-4");
SelectElement selectTwo = SelectMenuItem("test-5");

编辑

为了向你展示A的可重用性,它看起来应该是这样的.

方法返回带有动态Select Element字符串的XPath

代码语言:javascript
运行
复制
    public SelectElement SelectMenuItem(string menuValue)
    {
        var menuString = $"//select[@name='{menuValue}']";
        return new SelectElement(_driver.FindElement(By.XPath(menuString)));
    }

方法通过XPath为下拉列表设置值。

代码语言:javascript
运行
复制
    public void SetMenuValue(string menuValue, string menuDropDown)
    {
        SelectElement select = SelectMenuItem(menuDropDown);
        select.SelectByText(menuValue);

    }

最后,方法设置所需的特定值,首先传入value,然后传入XPath next:

代码语言:javascript
运行
复制
    public void Input_Values()
    {
        SetMenuValue("118", "test-4");
        SetMenuValue("121", "test-5");
    }

您不需要最后一个方法,您可以从任何地方调用SetMenuValue,这只是另一个例子,说明了如何做到这一点

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

https://stackoverflow.com/questions/67166221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档