4

問題は、入力に値を設定しようとすると、セレンが次のエラーを返すことです: RuntimeError: 要素は現在表示されていないため、操作できない可能性があります

ただし、入力は完全に表示されます。このテストでは、アプリケーションが正しく読み込まれるブラウザであるため、Firefox を使用しています。

アプリケーション コードを変更することはできず、アプリには多くのレガシー コードがありますが、問題を確認できる最も単純な例を再作成しました。

アプリケーション コードを変更しない回避策をご存知ですか?

私はwebdriverioを使用しています:

this.browser
    .url('http://localhost/main.xml')
    .setValue('[name=inputId]', 'aaaaaaaa')
    .close()
    .then(callback)

main.xml コンテンツ:

<?xml version="1.0" encoding="iso-8859-1" ?>
<?xml-stylesheet type="text/xsl" href="main.xsl" ?>
<CONTEXTO></CONTEXTO>

main.xsl コンテンツ:

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" encoding="iso-8859-1"/>

    <xsl:include href="helper.xsl"/>

    <xsl:template match="CONTEXTO">
        <html>
            <head>
                <title>Test main</title>
                <style>
                    * { margin:0; }
                    form { position: absolute; }
                    input { border: 1px black solid; }
                </style>
            </head>
            <body>
                <form name="" action="" method="POST">
                    <label for="inputId">inputId
                        <input type="text" name="inputId" id="inputId" value="" />
                    </label>
                </form>
            </body>
        </html>

    </xsl:template>
</xsl:stylesheet>

helper.xsl コンテンツ:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:template match="/">
        <script></script>
        <xsl:apply-templates select="CONTEXTO"/>
    </xsl:template>
</xsl:stylesheet>
4

3 に答える 3

0

入力値が最初に存在するのを待っています:

.waitForExist('[name=inputId]', 1000)
.setValue('[name=inputId]', 'aaaaaaaa')
于 2015-09-15T23:20:30.860 に答える
0

おそらく、Selenium の XML コンテンツは HTML コンテンツとはブラウザによって異なる方法で処理されるため、制限に達している可能性があります。代わりに SendKeys を使用して、これを修正することができます。ただし、要素が見つからない場合は、キー ナビゲーションで要素に移動する必要があり、これは難しい場合があります。

または、 XPath またはこの webdriver.io 代替を使用find_element_by_namefind_element_by_id要素を検索してみてください。何も機能しない場合は、ツリーをルート ノードから次のノードまでトラバースすることで確認できます。何も機能しない場合、私の推測では、Selenium は XSLT で生成された DOM ではなく、XML DOM を認識します (ルート要素を見つけようとします)。

于 2015-09-15T16:50:06.417 に答える