天道酬勤,学无止境

遍历列表并单击 Robotium 中的列表项(Iterating through a List and clicking on list items in Robotium)

问题

我试图通过遍历列表并单击每个列表元素来启动另一个活动,在 Robotium 中运行一些自动化测试。 我的测试方法中有以下代码:

代码:

      solo.assertCurrentActivity("Wrong activity", MainActivity.class);
      //Clicks on the action bar tab
      solo.clickOnText("Charts"); 


      ArrayList<ListView> list = solo.getCurrentListViews();

      for(int i = 0; i < list.size(); i++) {


         //Clicks on the list item assert that the new activity is started
         solo.clickInList(chartPosition);
         solo.assertCurrentActivity("Json Class", JsonActivity.class);
         //Go back to the list  
         solo.goBack();         


     }

上面的代码没有点击任何列表项,JUnit测试结果显示所有测试都通过了,这很令人困惑。

有没有人如何成功遍历 Robotium 中的列表?

我看到了另一个与此类似的问题,但答案建议查看 jMock,这无济于事。

回答1

我看到几个问题:

  1. 该代码正在迭代 Activity 中的所有列表视图,但它并未对当前列表视图执行任何操作。
  2. 由于代码没有显示chartPosition的值,所以不能保证当前列表有那么多项目。
  3. 我相信您需要等待新活动加载。

尝试这个:

  for(int i = 0; i < list.size(); i++) {
      assertTrue("There are no listviews in this activity.", list.size() > 0);
      chartPosition = 0;  // just to be safe, point at the first item in the list.
      for(int i = 0; i < list.size(); i++) {
         solo.clickInList(chartPosition, i);  // Note that "i" identifies the ListView

         solo.waitForActivity("name.of.the.expected.activity");

      }
     ...
  }

免责声明 - 此建议纯粹基于代码检查和 Robotium Solo Javadoc:http://www.jarvana.com/jarvana/view/com/jayway/android/robotium/robotium-solo/1.4.0/robotium-solo-1.4 .0-javadoc.jar!/com/jayway/android/robotium/solo/Solo.html#clickInList(int)

回答2

我以前在稍微不同的状态下使用过这些辅助函数来处理列表视图所需的大部分内容:

public View getViewAtIndex(final ListView listElement, final int indexInList, Instrumentation instrumentation) {
    ListView parent = listElement;
    if (parent != null) {
        if (indexInList <= parent.getAdapter().getCount()) {
            scrollListTo(parent, indexInList, instrumentation);
            int indexToUse = indexInList - parent.getFirstVisiblePosition();
            return parent.getChildAt(indexToUse);
        }
    }
    return null;
}

public <T extends AbsListView> void scrollListTo(final T listView,
        final int index, Instrumentation instrumentation) {
    instrumentation.runOnMainSync(new Runnable() {
        @Override
        public void run() {
            listView.setSelection(index);
        }
    });
    instrumentation.waitForIdleSync();
}

将这些函数存储在某处(如果您愿意,它们可以是静态的……我不想这样做,但很方便)

ListView list = solo.getCurrentListViews().get(0);
for(int i=0; i < list.getAdapter().getCount(); i++){
    solo.clickOnView(getViewAtIndex(list, i, getInstrumentation()))
    solo.assertCurrentActivity("Json Class", JsonActivity.class);
    solo.goBack();
}

您当前的解决方案实际上是尝试遍历屏幕上的所有列表视图,而不是列表视图中的元素。

标签

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 使用robotium滚动时单击所有列表视图元素(Click all the list view elements while scrolling using robotium)
    问题 我有一个包含很多元素的 listView,即我们必须向下滚动才能看到所有元素。 现在我想要做的是,单击所有 listView 元素。 我怎样才能做到这一点。 现在,我正在使用以下代码,但它不会自动滚动。 请帮忙。 ListView l = solo.getCurrentListViews().get(0); assertNotNull("No list views!", l); assertTrue("No items in list view!", l.getChildCount() > 0); // Get the last list item View v = l.getChildAt(l.getChildCount()); System.out.println("getChildCount: " + l.getChildCount()); int i = 1; while (i <= l.getChildCount()) { solo.clickInList(i); solo.goBack(); i++; } 回答1 我以前在稍微不同的状态下使用这些辅助函数来处理我们需要的大部分列表视图: public View getViewAtIndex(final ListView listElement, final int indexInList
  • Robotium 示例(Examples for Robotium)
    问题 我找到了一个叫做 Robotium 的 Instrumentation Testing 工具。它对于 Android 应用程序的黑盒测试非常简单。 我们可以这样使用它: solo.clickOnText("Other"); solo.clickOnButton("Edit"); assertTrue(solo.searchText("Edit Window")); solo.enterText(1, "Some text for testing purposes") solo.clickOnButton("Save"); assertTrue(solo.searchText("Changes have been made successfully")); solo.clickOnButton("Ok"); assertTrue(solo.searchText("Some text for testing purposes")); 任何机构都可以对此有更多了解吗? 任何人都可以告诉我们如何将它用于 webviews 和 listviews 等。 回答1 有关 Robotium 支持的常见问题和解答,请参阅 QA wiki 页面:http://code.google.com/p/robotium/wiki/QuestionsAndAnswers 另外请转到入门页面:http:/
  • 遍历列表以在Flutter中渲染多个小部件?(Iterating through a list to render multiple widgets in Flutter?)
    问题 我有这样定义的字符串列表: var list = ["one", "two", "three", "four"]; 我想使用文本小部件在屏幕上并排显示值。 我试图使用以下代码来尝试此操作: for (var name in list) { return new Text(name); } 但是,当我运行此代码时,for循环仅运行一次,并且只有一个呈现的文本窗口小部件表示one (列表中的第一项)。 另外,当我在for循环中添加一条日志消息时,它也会被触发一次。 为什么我的for循环不是基于列表的长度? 它似乎只运行一次,然后退出。 回答1 基本上,当您在某个函数上单击“返回”时,该函数将停止并且不会继续进行迭代,因此您需要做的是将其全部放入列表中,然后将其添加为小部件的子级 您可以执行以下操作: Widget getTextWidgets(List<String> strings) { List<Widget> list = new List<Widget>(); for(var i = 0; i < strings.length; i++){ list.add(new Text(strings[i])); } return new Row(children: list); } 甚至更好的是,您可以使用.map()运算符并执行以下操作: Widget
  • 遍历数据框中的一列并创建一个带有列名称 + str 的列表(iterating through a column in dataframe and creating a list with name of the column + str)
    问题 我有一个包含 2 个 coulmn 的数据框,我想遍历列标题,使用该值并向其添加一个字符串并将其用作列表的名称。 rr resampled=pd.DataFrame() resampled['RAT']=dd1['RAT'] resampled['SAT']=dd1['SAT'] rr=resampled-resampled.shift(1) for ind, column in enumerate(rr.columns): name=column+'stuck' name=[] print(name) 我想获得 2 个名称为 RATstuck SATstuck 的列表 谢谢你! 回答1 你试过列表理解吗? [x+'stuck' for x in rr.columns]
  • 使用 For Each 循环遍历列表时删除列表中的项目(Removing Items in a List While Iterating Through It with For Each Loop)
    问题 我有一个名为NeededList的列表,我需要检查此列表中的每个项目以查看它是否存在于我的数据库中。 如果它确实存在于数据库中,我需要将其从列表中删除。 但是在遍历列表时我无法更改列表。 我怎样才能使这项工作? 到目前为止,这是我的代码: For Each Needed In NeededList Dim Ticker = Needed.Split("-")(0).Trim() Dim Year = Needed.Split("-")(1).Trim() Dim Period = Needed.Split("-")(2).Trim() Dim Table = Needed.Split("-")(3).Trim() Dim dr As OleDbDataReader Dim cmd2 As New OleDb.OleDbCommand("SELECT * FROM " & Table & " WHERE Ticker = ? AND [Year] = ? AND Period = ?", con) cmd2.Parameters.AddWithValue("?", Ticker) cmd2.Parameters.AddWithValue("?", Year) cmd2.Parameters.AddWithValue("?", Period) dr = cmd2
  • 遍历 Pandas DataFrame 中的列表(Iterating through lists within a pandas DataFrame)
    问题 我原来的 Pandas DataFrame 看起来像这样: df = Person_ID | trip_purpose | trip_start_time | trip_end_time ----------------------------------------------------------- 1 | 'Work' | 05:40:00 | 05:42:00 2 | 'School' | 06:40:00 | 06:45:00 1 | 'Leisure' | 05:52:00 | 06:37:00 1 | 'Home' | 06:40:00 | 06:49:00 ... 第一步:按Person_ID分组: df = df.groupby('Person_ID').agg(lambda x : ','.join(x).split(',')) # this is faster than grouping by .agg(list) 分组结果: Person_ID | trip_purpose | trip_start_time | trip_end_time --------------------------------------------------------------- | ['Work', | [05:40:00, | [05:42:00, 1 |
  • Python:遍历列表与字典项效率(Python: iterating over list vs over dict items efficiency)
    问题 在some_dict.items()迭代是否some_dict.items()于在CPython中对相同项目的列表进行迭代? 回答1 这取决于您所使用的Python版本。 在Python 2中, some_dict.items()创建一个新列表,这会花费一些额外的时间并消耗更多的内存。 另一方面,一旦创建了列表,它就是一个列表,因此在完成列表创建的开销之后,应该具有相同的性能特征。 在Python 3中, some_dict.items()创建了一个视图对象,而不是一个列表,而且我预计对items()创建和迭代将比Python 2更快,因为无需复制任何内容。 但是我也希望迭代一个已经创建的视图比迭代一个已经创建的列表要慢一些,因为字典数据存储得很少,而且我相信python没有很好的方法来避免迭代每个bin中的对象。字典-甚至是空字典。 在Python 2中,一些时间确定了我的直觉: >>> some_dict = dict(zip(xrange(1000), reversed(xrange(1000)))) >>> some_list = zip(xrange(1000), xrange(1000)) >>> %timeit for t in some_list: t 10000 loops, best of 3: 25.6 us per loop >>> %timeit
  • 为什么遍历列表比索引索引快?(Why would iterating over a List be faster than indexing through it?)
    问题 阅读有关ADT列表的Java文档时,它说: List接口提供了四种位置(索引)访问列表元素的方法。 列表(如Java数组)是从零开始的。 请注意,对于某些实现(例如,LinkedList类),这些操作可能在时间上与索引值成比例执行。 因此,如果调用者不知道实现,则遍历列表中的元素通常比对其进行索引更可取。 这到底是什么意思? 我不明白所得出的结论。 回答1 在链接列表中,每个元素都有一个指向下一个元素的指针: head -> item1 -> item2 -> item3 -> etc. 要访问item3 ,您可以清楚地看到您需要从头经过每个节点直到到达item3,因为您无法直接跳转。 因此,如果我想打印每个元素的值,请编写以下代码: for(int i = 0; i < 4; i++) { System.out.println(list.get(i)); } 这是怎么回事: head -> print head head -> item1 -> print item1 head -> item1 -> item2 -> print item2 head -> item1 -> item2 -> item3 print item3 这是非常低效的,因为每次索引时,它都会从列表的开头重新开始并遍历每个项目。 这意味着您的复杂度实际上是O(N^2)仅用于遍历列表! 如果相反
  • 性能:遍历Java中的列表(Performance: Iterating through a List in Java)
    问题 这样遍历Java中的列表是否较慢: for (int i=0;i<list.size();i++) { .. list.get(i) } 相对于: for (Object o: list) { ... o } 回答1 我假设您出于好奇而问,不会援引Knuth(可能有人会)。 我相信,一旦您的代码被编译,就不会有任何改变。 之前确实有所作为(示例2更具可读性和简洁性),所以选择数字2而不关心其余内容。 就是我的2美分 编辑 请注意,代码片段1中的代码每次循环运行时都会计算list.size() ,这可能使其比数字2还要慢 还需要编辑 我必须仔细检查一下,Joshua Bloch建议for each循环使用(请参见Effective Java的项目46)。 我相信到此结束各种讨论。 谢谢乔什! :) 回答2 普通列表的性能不应有任何明显的差异。 对于链表,迭代器将明显更快,尤其是对于大型列表。 回答3 为该问题创建了一个微基准测试,并惊讶地发现每个索引的运行速度比索引循环快2到3倍。 我唯一的解释是,对于每个版本,可能不需要通过ArrayList.get(int index)进行范围检查。 对于非常小的列表(10个元素),结果大致相同。 对于100个元素,每个元素的速度快1.5倍,对于10000-100000个元素,它的速度快2到3倍。 测试是在随机数据集上运行的
  • 在Java中,您可以在遍历列表时修改它吗?(In Java, can you modify a List while iterating through it?)
    问题 我了解在Java中, Collection<E>不应在遍历Collection<E>进行修改,例如删除或添加元素。 但是,如何更改列表中的元素呢? 例如,如果我们有 List<String> letters = new ArrayList<String>(); letters.add("A"); letters.add("B"); letters.add("C"); int i = 0; for (String letter : letters) { letters.set(i, "D"); i++; } 因此,我并不是在谈论修改存储在某个元素上的对象; 我说的是改变对象是。 List的大小没有更改,但是索引处的对象正在更改,因此从技术上讲,List也在被修改。 我的老板声称此代码很好(并且确实可以正常工作),但我仍然认为它是不正确的。 是否可以使用ListIterator的set(E e)方法更好地做到这一点? 回答1 在遍历列表时修改列表中的元素没有错(不要修改列表本身,不建议这样做),但是可以这样更好地表达它: for (int i = 0; i < letters.size(); i++) { letters.set(i, "D"); } 最后,整个列表将以字母"D"为内容。 在这种情况下,使用增强的for循环不是一个好主意,您不对任何事情使用迭代变量
  • 不遍历csv文件python3中的所有行(Not Iterating through all lines from a csv file python3)
    问题 我对 python3 很陌生,我相信我的问题非常基本。 我一直在网上寻找一些帮助,我得到的最接近的来自线程 Find Common Region in two CSV File in PYTHON 但是,在我的情况下,它似乎没有遍历每一行并在第一行停止。 所以在我的第一个 csv 我有 2 行,让我们说: A,1,A1 B,2,B2 现在在我的第二个 csv 中,我有一千行,比如 A,1,B5 A,2,A2 B,2,C6 B,3,C7 C,3,D7 C, 4, D8 ...... 我的代码如下: read1 = csv.reader(csv1) for row1 in read1: read2 = csv.reader(csv2) for row2 in read2: if row1[0] == row2[0] and row1[1] == row2[1]: print('There is a match', row1[0], row1[1]) 但是,我的输出是 There is a match A 1 它只找到第一个匹配项,而不找到另一个匹配项:B 2 我不确定我的迭代中有什么问题: 预先感谢您的帮助 回答1 第一次循环后,文件csv2将位于文件末尾。 后续读取将返回一个空字符串。 即使您使用相同的文件对象创建新的 CSV 阅读器也是如此。 由于这个原因
  • 在Java中以相反的顺序遍历列表(Iterating through a list in reverse order in java)
    问题 我正在迁移一段代码以使用泛型。 这样做的一个论据是for循环比跟踪索引或使用显式迭代器要干净得多。 在大约一半的情况下,今天使用索引以相反的顺序迭代列表(ArrayList)。 有人可以建议一种更干净的方法(由于我不喜欢使用集合时indexed for loop ),尽管它确实有效? for (int i = nodes.size() - 1; i >= 0; i--) { final Node each = (Node) nodes.get(i); ... } 注意:我无法在JDK之外添加任何新的依赖项。 回答1 尝试这个: // Substitute appropriate type. ArrayList<...> a = new ArrayList<...>(); // Add elements to list. // Generate an iterator. Start just after the last element. ListIterator li = a.listIterator(a.size()); // Iterate in reverse. while(li.hasPrevious()) { System.out.println(li.previous()); } 回答2 番石榴提供Lists#reverse(List)和ImmutableList
  • 遍历python字典中的键值对以构建对象列表(Iterating through key value pairs in a python dictionary to build an list of objects)
    问题 我需要将一些对象发布到 Flask 应用程序,其中每个对象由 2 个键值对组成。 我正在使用邮递员测试将 1 个对象作为 json 发送,但我需要能够发送多个对象(同样,每个对象都由 2 kv 对组成,如屏幕截图所示) 我的烧瓶应用程序看起来像: json = request.get_json(force=True) # receives request from postman for j in json: print str(j) test = [{'a': j['key1'], 'token':j['key2']} for j in json ] 我想将 json 重建为字典列表('test'),其中 dic 包含 2 个 kv 对(即每个 dic 是一个对象)。 不幸的是,我意识到因为上面的 json 是 {u'key2': u'xyz', u'key1': u'abc'} 我越来越: TypeError: string indices must be integers 请参阅 TypeError:字符串索引必须是带有flask json 的整数 在这种情况下,只有 1 个对象,但是如何遍历 json 变量来构建我需要的 dics 列表? 回答1 让我{u'key2': u'xyz', u'key1': u'abc'}您的代码,假设json是一个包含数据{u'key2
  • 如何在 SharePoint 2013 设计器工作流中执行循环遍历列表项?(How to perform Looping Through List Items in SharePoint 2013 Designer Workflows?)
    问题 我是 SharePoint 的新手。 我正在 SharePoint 2013 中创建一个工作流,我想在其中使用循环迭代列表。 如何在 SharePoint 2013 设计器工作流中执行列表项循环? 回答1 我不知道有什么开箱即用的方法可以让工作流“循环”列表中的所有条目,但是您可以尝试使两个工作流相互弹回,直到所有条目都更新,这里是详细步骤, 假设我们正在处理的列表名为list_work ,在此列表中,创建一个名为例如cargo的列定义另一个列表,将其命名为例如list_control , 定义一个名为例如listID的列, 定义一个名为例如cargo的列, 在列表中创建一个条目,将cargo设置为一个值。 定义一个工作流,将其命名为例如workflow_list_control ,每次更新list_control的条目时list_control触发该工作流,在此工作流中, 在list_work中搜索list_work.cargo不等于list_control.cargo 如果任何条目被找到,更新的条目list_work并设置list_work.cargo与list_control.cargo ,为了触发workflow_list_work (见下文#4) 如果未找到任何条目,请停止此工作流程。 定义需要在list_work上运行的workflow_list_work
  • 通过元组列表快速迭代(iterating quickly through list of tuples)
    问题 我想知道是否有一种更快,更省时的方法来遍历元组列表,找到合适的匹配项。 我要做的是: # this is a very long list. my_list = [ (old1, new1), (old2, new2), (old3, new3), ... (oldN, newN)] # go through entire list and look for match for j in my_list: if j[0] == VALUE: PAIR_FOUND = True MATCHING_VALUE = j[1] break 根据列表中项目的数量,此代码可能需要花费一些时间才能执行。 我敢肯定有更好的方法可以做到这一点。 回答1 假设更多的内存使用不是问题,并且如果元组的第一项是可哈希的,则可以从元组列表中创建一个dict,然后查找值就像从dict查找键一样简单。 就像是: dct = dict(tuples) val = dct.get(key) # None if item not found else the corresponding value 编辑:要创建一个反向映射,请使用类似: revDct = dict((val, key) for (key, val) in tuples) 回答2 我认为你可以使用 for j,k in my_list: [
  • 遍历 Pandas Groupby 并合并数据帧(Iterating through Pandas Groupby and Merging DataFrames)
    问题 这似乎应该很简单,但让我很难过。 真的很喜欢能够遍历 groupby 操作的组,我从 groupby 中得到了我想要的结果,但我无法将最终结果合并到一个数据帧中。 所以基本上我有下面的代码可以捕获列表中的数据帧,但我不知道如何遍历数据帧列表来制作一个数据帧: dfs = [] for name, group in df.groupby('date', sort=False): dfs.append(pd.DataFrame(pd.DataFrame(list(chain.from_iterable(group['values'])), columns=['col']).groupby('col').size(), columns=[name]).reset_index()) 我得到以下信息(只显示 dfs[0] 和 dfs[1] 但我最多有 dfs[8]: [ col1 col2 0 val1 val2, ... col1 col2 0 val1 val2] ... 我只想将它们全部合并到 col1 键上。 换句话说,以下效果很好,但是如何在不对列表中的各个元素进行硬编码并在 dfs 中遍历所有元素的情况下做到这一点? pd.concat([dfs[0], dfs[1]], axis=1, join='outer') 回答1 为什么不只是: pd.concat(dfs
  • 在遍历和删除ArrayList中的元素时如何避免java.util.ConcurrentModificationException(How to avoid java.util.ConcurrentModificationException when iterating through and removing elements from an ArrayList)
    问题 我有一个要迭代的ArrayList。 在迭代它时,我必须同时删除元素。 显然,这引发了java.util.ConcurrentModificationException 。 解决此问题的最佳实践是什么? 我应该先克隆列表吗? 我不删除循环本身中的元素,而是删除代码的另一部分。 我的代码如下所示: public class Test() { private ArrayList<A> abc = new ArrayList<A>(); public void doStuff() { for (A a : abc) a.doSomething(); } public void removeA(A a) { abc.remove(a); } } a.doSomething可能会调用Test.removeA() ; 回答1 两种选择: 创建要删除的值的列表,将其添加到循环中的列表中,然后在最后调用originalList.removeAll(valuesToRemove) 在迭代器本身上使用remove()方法。 请注意,这意味着您不能使用增强的for循环。 作为第二个选项的示例,从列表中删除任何长度大于5的字符串: List<String> list = new ArrayList<String>(); ... for (Iterator<String> iterator =
  • PHP 遍历一个简单的逗号分隔列表(PHP iterating through a simple comma separated list)
    问题 我有一个字符串可以是 $string = "value."; 或者 $string = "value1, value2."; 我想遍历这个字符串,得到每个项目,它们是 -> value (在第一个例子中)和 -> value1 AND value2在第二个(最后没有逗号或点)。 我在想; 最后替换点。 检查是否有逗号。 如果有逗号,请使用“,”拆分爆炸并迭代。 如果没有,只有一项,所以只需使用它。 这是正确的做法吗? 我是 PHP 新手,正在尝试学习最佳实践和解决问题的最佳方法。 谢谢你。 回答1 你是绝对正确的,你可以这样做: $string = 'foo, bar, baz.'; $string = preg_replace('/\.$/', '', $string); //Remove dot at end if exists $array = explode(', ', $string); //split string into array seperated by ', ' foreach($array as $value) //loop over values { echo $value . PHP_EOL; //print value } 回答2 我知道这已经得到了回答,但是,您可以使用一个命令来做到这一点: $input = "foo, bar, baz
  • 使用 jquery prev next 按钮循环遍历无序列表(Looping through unordered list with jquery prev next buttons)
    问题 我有一个带有两个链接的无序列表,一个上一个和下一个按钮。 我的目标是:单击上一个按钮时,上一个列表项的颜色将变为红色。 单击下一个项目时,下一个列表项目将更改颜色。 当到达最后一个列表项并单击 next 时,它将循环回到第一个列表项(反之亦然,对于上一个链接)。 到目前为止,我使用下面的 jquery/html 以 95% 的速度工作: <div id="lessonThree"> <a class="prev" href="#">Prev</a> <a class="next" href="#">Next</a> <ul> <li>Ferrari</li> <li>Lamborghini</li> <li>Aston Martin</li> <li>Fiat</li> <li>Saab</li> <li>Harley Davidson</li> <li>Triumph</li> <li>Zonda</li> <li>Bugatti</li> <li>Suzuki</li> </ul> </div> 开始查询 var myCar = $("#lessonThree li").length; var liNum = 0; $("a.next").click(function(){ $("#lessonThree li").css("color","black"); if
  • org.openqa.selenium.StaleElementReferenceException:在遍历列表时元素未附加到页面文档(org.openqa.selenium.StaleElementReferenceException: element is not attached to the page document while iterating through a List)
    问题 我不知道为什么会出现这个错误。 需要帮助修复它。 我正在开发的网站:“http://freevideolectures.com/Course/3680/Pentaho-BI”。 在本站 List<WebElement> cl = d.findElements(By.xpath("//ul[@class='lecture_menu']/li/a")); System.out.println(cl.size()); for(int e=0 ; e<=cl.size()-1; e++) { cl.get(e).click();// i think the error shows up here, the loop runs for e=0 , Thread.sleep(1000); String q = d.findElement(By.xpath(".//*[@id='cs-about']/div/div[2]/div[2]/span/a")).getAttribute("href"); System.out.println(q); } 循环为 e=0 运行一次,我正在获取该输出。 在此之后,错误出现了。 错误:过时的元素参考:元素未附加到页面文档。 请帮助 。 回答1 这是打开WebBrowser URL为http://freevideolectures.com/Course